package br.com.sgpv2.hibernate.faixacomparativo;

import java.util.Collections;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import br.com.sgpv2.entity.faixacomparativo.FaixaComparativo;
import br.com.sgpv2.hibernate.infra.SGPGenericDAO;

public class FaixaComparativoHibernateDAO extends
		SGPGenericDAO<FaixaComparativo> implements FaixaComparativoRepository {

	private static final String LIKE = "%";

	/** Construtor padrão. */
	@Autowired
	public FaixaComparativoHibernateDAO(
			@Qualifier("sessionFactory") SessionFactory factory) {
		super(FaixaComparativo.class);
		super.setSessionFactory(factory);
	}

	@Override
	public List<FaixaComparativo> consultarPorDescricao(String descricao) {
		Criteria criteria = createCriteria(FaixaComparativo.class);
		criteria.add(Restrictions.like("descricao", descricao));
		return Collections.checkedList(
				(List<FaixaComparativo>) criteria.list(),
				FaixaComparativo.class);
	}

	@Override
	public void exluirItensFaixaComparativo(FaixaComparativo faixaComparativo) {
		Query query = getSession()
				.createQuery(
						"delete from ItemFaixaComparativo where faixaComparativo.id = :faixaComparativoId");
		query.setParameter("faixaComparativoId", faixaComparativo.getId());
		query.executeUpdate();
	}

	@Override
	public List<FaixaComparativo> consultarFaixasComparativoPorFiltro(
			String descricao) {
		Criteria criteria = createCriteria(FaixaComparativo.class);

		criteria.add(Restrictions.like("descricao", descricao + LIKE));

		return Collections.checkedList(
				(List<FaixaComparativo>) criteria.list(),
				FaixaComparativo.class);
	}
}
